package edu.ynu.se.xiecheng.achitectureclass.digitalagriculture.service;

import edu.ynu.se.xiecheng.achitectureclass.digitalagriculture.dao.DeviceMonitorRecordDAO;
import edu.ynu.se.xiecheng.achitectureclass.digitalagriculture.entity.DeviceMonitorRecordEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 设备监控记录服务类
 * 设计原则体现：
 * 1. 单一职责原则(SRP) - 该类专注于设备监控记录的业务逻辑
 * 2. 依赖注入原则(DI) - 通过构造函数注入所需的DAO
 */
@Service
public class DeviceMonitorRecordService {

    private final DeviceMonitorRecordDAO deviceMonitorRecordDAO;

    public DeviceMonitorRecordService(DeviceMonitorRecordDAO deviceMonitorRecordDAO) {
        this.deviceMonitorRecordDAO = deviceMonitorRecordDAO; // 依赖注入
    }

    /**
     * 获取最新监控数据
     * 设计原则体现：
     * 1. 高内聚 - 方法功能单一，专注于获取最新数据
     * 2. 关注点分离 - 数据访问逻辑与业务逻辑分离
     */
    public List<DeviceMonitorRecordEntity> getLastData() {
        return deviceMonitorRecordDAO.getLastData(); // 调用DAO层方法
    }

    /**
     * 批量保存监控记录
     * 设计原则体现：
     * 1. 事务管理 - 通过服务层管理数据的一致性
     * 2. 单一职责原则 - 方法只负责保存监控记录
     */
    public void saveBatch(List<DeviceMonitorRecordEntity> list) {
        deviceMonitorRecordDAO.saveAll(list); // 调用DAO层方法
    }

    /**
     * 分页查询监控记录
     * 设计原则体现：
     * 1. 开放封闭原则(OCP) - 通过参数化支持不同的分页需求
     * 2. 迪米特法则 - 只与直接依赖的DAO交互
     */
    public Page<DeviceMonitorRecordEntity> page(Integer current, Integer size) {
        return deviceMonitorRecordDAO.findAll(PageRequest.of(current, size)); // 调用DAO层方法
    }
}
